/*
 * main.cpp
 *
 *  Created on: 25 mars 2012
 *      Author: root
 */

#include<iostream>
#include<sstream>
#include "ConnexionClient.h"
#include "ControleDeSaisie.h"
#include "Agence.h"
#include "MessageRendre.h"
#include "MessageReserver.h"
#include "MessageAjouterClient.h"
#include "MessageVU.h"
#include "MessageVT.h"
#include "MessageAfficher.h"

using namespace std;



int main()
{string Login;
 string Password;
 int x;
 Agence A;
 int kkk;
 
 	do
 		{
		cout<<"*********  BIENVENU: Vous devez entrer votre login & mot de passe :***********"<<endl;
		int id=50;
		cout<<"* Votre login :                                                              *"<<endl;
		cout<<""<<endl;
		cin>>Login;
		cout<<""<<endl; 
		cout<<"* Votre mot de passe :                                                       *"<<endl;
		cout<<""<<endl;
		cin>>Password;
		
		string tk;
				stringstream oss;
				oss<<id<<" "<<Login<<" "<<Password;
				tk=oss.str();
				ConnexionClient C;
				kkk=C.envoyer_message(tk);
 	} while(kkk!=2);
 	
do
{	do
	{	cout<<"************************************ MENU *************************************"<<endl;
		cout<<"*	                                                                         *"<<endl;
		cout<<"* 	 Vous devez choisir entre un de ces services proposer :                  *"<<endl;
		cout<<"*	                                                                         *"<<endl;
		cout<<"* 0 . Quitter                                                                 *"<<endl;
		cout<<"*	                                                                         *"<<endl;
		cout<<"* 1 . Reserver vehicule                                                       *"<<endl;
		cout<<"* 11. Reserver Vehicule Utilitaire                                            *"<<endl;
		cout<<"* 12. Reserver Vehicule Touristique                                           *"<<endl;
		cout<<"*   	                                                                         *"<<endl;
		cout<<"* 2 . Rendre Vehicule                                                         *"<<endl;
		cout<<"* 21. Rendre Vehicule Utilitaire                                              *"<<endl;
		cout<<"* 22. Rendre Vehicule Touristique                                             *"<<endl;
		cout<<"*   	                                                                         *"<<endl;
		cout<<"* 3 . Ajouter Client                                                          *"<<endl;
		cout<<"*                                                                             *"<<endl;
		cout<<"* 4 . Afficher Vehicule Disponible                                            *"<<endl;
		cout<<"* 41. Afficher Vehicule Touristique Disponible & selon le nombre de place     *"<<endl;
		cout<<"* 42. Afficher Vehicule Utilitaire Disponible & selon le poid maximal         *"<<endl;
		cout<<"* 43. Afficher Parking qui ont des places vides                               *"<<endl;
		cout<<"*                                                                             *"<<endl;
		cout<<"*******************************************************************************"<<endl;
		cout<<""<<endl;
		cout<<""<<endl;
		cin>>x;
		cout<<""<<endl;
		cout<<""<<endl;

		switch (x)
		{

case (1):
{//reserver Vehicule;

string NumMatricule;
int NombreDeJour;
long NumReservation;
string NaturePaiment;
string DateDebut;
string DateRetour;
string DateReservation;
long CIN;
long NumParking;
string NomAgent;
float Prix;
Reservation RES;
ControleDeSaisie C;
long aa;
long mm;
long jj;


cout<<"Entrer le numero de matricule du vehicule choisi : "<<endl;
cin>>NumMatricule;

cout<<"Entrer la date de reservation: "<<endl;
DateReservation=C.VerifierDate();

cout<<"Entrer la date de debut: "<<endl;
DateDebut=C.VerifierDate();

cout<<"Entrer la date de Retour: "<<endl;
DateRetour=C.VerifierDate();

cout<<"Entrer la Carte d'identité National ou du passport : "<<endl;
CIN=C.Verifierlong();

cout<<"Entrer le nombre de jour ou le vehicule sera louer: "<<endl;
NombreDeJour=C.Verifierlong();
Prix= RES.PrixAPayer(NombreDeJour);

cout<<"Entrer le numero de réservation : "<<endl;
NumReservation=C.Verifierlong();

cout<<"Entrer la nature de paiement: "<<endl;
cin>>NaturePaiment;
/*
cout<<"entrer le numero de parking"<<endl;
NumParking=C.Verifierlong();
*/
cout<<"entrer votre nom : "<<endl;
cin>>NomAgent;

MessageReserver m(x, NumMatricule, NombreDeJour, NumReservation, NaturePaiment, DateDebut, DateRetour, DateReservation, CIN, NomAgent,Prix);
string MS=m.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);

break;
}

case (11)://reserver Utilitaire
{
string NumMatricule;
float Prix;
Reservation RES;
int NombreDeJour;
long NumReservation;
string NaturePaiment;
string DateDebut;
string DateRetour;
string DateReservation;
long CIN;
long NumParking;
string NomAgent;
ControleDeSaisie C;

cout<<"entrer votre nom : "<<endl;
cin>>NomAgent;

cout<<"Entrer le numero de matricule du vehicule choisi : "<<endl;
cin>>NumMatricule;

cout<<"Entrer la date de reservation: "<<endl;
DateReservation=C.VerifierDate();

cout<<"Entrer la date de debut: "<<endl;
DateDebut=C.VerifierDate();

cout<<"Entrer la date de Retour: "<<endl;
DateRetour=C.VerifierDate();

cout<<"Entrer la Carte d'identité National ou du passport : "<<endl;
CIN=C.Verifierlong();

cout<<"Entrer le nombre de jour ou le vehicule sera louer: "<<endl;
NombreDeJour=C.Verifierlong();
Prix= RES.PrixAPayer(NombreDeJour);

cout<<"Entrer le numero de réservation : "<<endl;
NumReservation=C.Verifierlong();

cout<<"Entrer la nature de paiement: "<<endl;
cin>>NaturePaiment;
/*
cout<<"entrer le numero de parking"<<endl;
NumParking=C.Verifierlong();
*/
MessageReserver m(x, NumMatricule, NombreDeJour, NumReservation, NaturePaiment, DateDebut, DateRetour, DateReservation, CIN, NomAgent,Prix);
string MS=m.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);
break;
}

case (12):
{
string NumMatricule;
float Prix;
int NombreDeJour;
long NumReservation;
string NaturePaiment;
string DateDebut;
string DateRetour;
string DateReservation;
long CIN;
long NumParking;
string NomAgent;
Reservation RES;
ControleDeSaisie C;

cout<<"entrer votre nom : "<<endl;
cin>>NomAgent;

cout<<"Entrer le numero de matricule du vehicule choisi : "<<endl;
cin>>NumMatricule;

cout<<"Entrer la date de reservation: "<<endl;
DateReservation=C.VerifierDate();

cout<<"Entrer la date de debut: "<<endl;
DateDebut=C.VerifierDate();

cout<<"Entrer la date de Retour: "<<endl;
DateRetour=C.VerifierDate();

cout<<"Entrer la Carte d'identité National ou du passport : "<<endl;
CIN=C.Verifierlong();

cout<<"Entrer le nombre de jour ou le vehicule sera louer: "<<endl;
NombreDeJour=C.Verifierlong();
Prix= RES.PrixAPayer(NombreDeJour);

cout<<"Entrer le numero de réservation : "<<endl;
NumReservation=C.Verifierlong();

cout<<"Entrer la nature de paiement: "<<endl;
cin>>NaturePaiment;
/*
cout<<"entrer le numero de parking"<<endl;
NumParking=C.Verifierlong();
*/
MessageReserver m(x, NumMatricule, NombreDeJour, NumReservation, NaturePaiment, DateDebut, DateRetour, DateReservation, CIN, NomAgent,Prix);
string MS=m.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);

break;
}

case(2)://rendre vehicule
{
long NumParking;
string NomAgent;
string EtatVehicule;
string DateRendu;
string NumMatricule;
long NumAgence;
ControleDeSaisie C;

cout<<"Entrer Votre Nom : "<<endl;
cin>>NomAgent;

cout<<"Indiquer l'état du vehicule : "<<endl;
cin>>EtatVehicule;

cout<<"Entrer la date de retour : "<<endl;
DateRendu=C.VerifierDate();

cout<<"Entrer Le Numéro de Matricule du vehicule rendu  : "<<endl;
cin>>NumMatricule;

cout<<"Indiquez le Numero du Parking: "<<endl;
NumParking=C.Verifierlong();

cout<<"Entrer le numero de votre Agence : "<<endl;
NumAgence=C.Verifierlong();

MessageRendre MR(x, NumMatricule, NomAgent, EtatVehicule, NumParking, DateRendu, NumAgence);
string MS=MR.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);

break;
}

case(21)://rendre vehicule
{
long NumParking;
string NomAgent;
string EtatVehicule;
string DateRendu;
string NumMatricule;
long NumAgence;
ControleDeSaisie C;

cout<<"Entrer Votre Nom : "<<endl;
cin>>NomAgent;

cout<<"Indiquer l'état du vehicule : "<<endl;
cin>>EtatVehicule;

cout<<"Entrer la date de retour : "<<endl;
DateRendu=C.VerifierDate();

cout<<"Entrer Le Numéro de Matricule du vehicule rendu  : "<<endl;
cin>>NumMatricule;

cout<<"Indiquez le Numero du Parking: "<<endl;
NumParking=C.Verifierlong();

cout<<"Entrer le numero de votre Agence : "<<endl;
NumAgence=C.Verifierlong();

MessageRendre MR(x, NumMatricule, NomAgent, EtatVehicule, NumParking, DateRendu, NumAgence);
string MS=MR.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);

break;
}

case(22)://rendre vehicule
{
long NumParking;
string NomAgent;
string EtatVehicule;
string DateRendu;
string NumMatricule;
long NumAgence;
ControleDeSaisie C;

cout<<"Entrer Votre Nom : "<<endl;
cin>>NomAgent;

cout<<"iIndiquer l'état du vehicule : "<<endl;
cin>>EtatVehicule;

cout<<"Entrer la date de retour : "<<endl;
DateRendu=C.VerifierDate();

cout<<"Entrer Le Numéro de Matricule du vehicule rendu  : "<<endl;
cin>>NumMatricule;

cout<<"Indiquez le Numero du Parking: "<<endl;
NumParking=C.Verifierlong();

cout<<"Entrer le numero de votre Agence : "<<endl;
NumAgence=C.Verifierlong();

MessageRendre MR(x, NumMatricule, NomAgent, EtatVehicule, NumParking, DateRendu, NumAgence);
string MS=MR.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);

break;
}

case(3):
{//ajouter Client :
long IdentifiantClient;
string Nom;
string Prenom;
long CIN;
string Adresse;
long Tel;
ControleDeSaisie C;
							
cout<<"Entrer le Numero de la carte d'identité national ou passport du client : "<<endl;
CIN=C.Verifierlong();

cout<<"Donnée un Identifiant pour le Client : "<<endl;
IdentifiantClient=C.Verifierlong();

cout<<"Entrer le nom du client : "<<endl;
cin>>Nom;

cout<<"Entrer le prenom du client"<<endl;
cin>>Prenom;

cout<<"Indiquer l'adresse du client : "<<endl;
cin>>Adresse;

cout<<"Indiquer le numéro de tèléphone du client"<<endl;
Tel=C.Verifierlong();
	
MessageAjouterClient MA(x, IdentifiantClient, Nom , Prenom, CIN, Adresse, Tel);
string MS=MA.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);

break;
}

case (4):
{
MessageAfficher MA(x);
string MS=MA.tostring();
ConnexionClient C;
C.envoyer_message(MS);
break;
}

case (41):
{
ControleDeSaisie C;
cout<<"Entrer le nombre de place souhaiter"<<endl;
int NombreDePlace=C.Verifierlong();

MessageVT MT(x,NombreDePlace);
string MS=MT.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);
break;
}

case (42):
{
ControleDeSaisie C;
cout<<"entrer le poids maximal que le vehicule puissent transporter"<<endl;
float PoidMax=C.Verifierfloat();
MessageVU MU(x,PoidMax);
string MS=MU.tostring();
ConnexionClient CC;
CC.envoyer_message(MS);
break;
}

case (43):
{//afficher parking
MessageAfficher MA(x);
string MS=MA.tostring();
ConnexionClient C;
C.envoyer_message(MS);
break;
}

}

}while((x!=0)||(x!=1)||(x!=11)||(x!=12)||(x!=21)||(x!=22)||(x!=23)||(x!=3)||(x!=4)||(x!=41)||(x!=42)||(x!=43));
}while(x!=0);
return 0;
}

